package com.bill.concurrency.example.singleton;

import com.bill.concurrency.annotations.NotThreadSafe;
import com.bill.concurrency.annotations.Recommend;
import com.bill.concurrency.annotations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;

/**
 * 构建一个单例类。
 * 枚举模式。单例实例在第一次使用时才实例化
 */
@Slf4j
@ThreadSafe
@Recommend
public class SingletonExample7 {
    /**
     * 私有构造器，一定要有。
     */
    private SingletonExample7(){
    }

    public SingletonExample7 getInstance(){
        return Singleton.INSTANCE.getInstnace();
    }

    private enum  Singleton {
        INSTANCE;
        private SingletonExample7 instnace;

        /**
         * JVM保存enum的构造函数只执行一次。
         */
         Singleton(){
            instnace=new SingletonExample7();
        }

        public SingletonExample7 getInstnace(){
             return instnace;
        }
    }
}
